#!/bin/bash
#========================================================================
# Author: YSLin
# Email: 
# File Name: var.sh
# Description: 
#    ${var:-str}     如果 var 變數存在且為非空值，就傳回其值 ﹔如果 var 變數存在但為空值或者 var 變數根本不存在，則傳回 str
#    ${var-str}      如果 var 變數存在且為非空值，就傳回其值 ﹔若 var 變數存在但為空值，則傳回空值 ﹔如果 var 變數不存在，則傳回 str。
#    ${var:=str}     如果 var 變數存在且為非空值，就傳回其值 ﹔如果 var 變數存在但為空值或者 var 變數根本不存在，就把 str 設定給 var ，並傳回 str。
#    ${var=str}      如果 var 變數存在且為非空值，就傳回其值 ﹔若 var 變數存在但為空值，則傳回空值 ﹔如果 var 變數不存在，就把 str 設定給 var ，並傳回 str
#    ${var:?info}    如果 var 變數存在且為非空值，就傳回其值 ﹔如果 var 變數存在但為空值或者 var 變數根本不存在，就會顯示 var: 及 info 的訊息
#    ${var?info}     如果 var 變數存在且為非空值，就傳回其值 ﹔若 var 變數存在但為空值，則傳回空值 ﹔如果 var 變數不存在，就會顯示 var: 及 info 的訊息。
#    ${var:+str}     如果 var 變數存在且為非空值，則傳回 str ﹔如果 var 變數存在但為空值或者 var 變數根本不存在，就傳回空值。
#    ${var+str}      如果 var 變數存在，且不論為空值或非空值，皆傳回 str ﹔如果 var 變數不存在，就傳回空值

   
# Edit History: 
#   2011-04-30    File created.
#========================================================================

#========================================================================
# var_assign.sh - 將字串代入到變數中                                                                                                          
#========================================================================

# 代入時，需視情況使用適當的引號
var1=word
var2="This is an example sentence."
var3='This is an another sentence.'

echo "$var1"
echo "$var2"
echo "$var3"


#========================================================================
# var_default.sh - 變數的預設值
#========================================================================

# 若變數中有設定值的話，會使用它原本的值
fruit="an orange"
echo "Do you have ${fruit:-some fruit}?"

# 若變數為空值的話，則會使用指定的預設值
fruit=
echo "Do you have ${fruit:-some fruit}?"

# 若是使用「${var:=default}」的話，在var是空值的時候代入default
echo "My name is ${name:=Guest}."  # 由於name是未定義，所以會代入"Guest"
echo "Hello, ${name}!"

#========================================================================
# var_is_defined.sh - 調查變數是否有被定義
#========================================================================

is_defined() {
    varname="$1"
    if set | grep -q "^${varname}="; then
    echo "${varname} is defined."
    else
    echo "${varname} is NOT defined."
    fi  
}

# foo是空的，但有被定義
foo=""

is_defined "PATH"
is_defined "foo"
is_defined "bar"

# 取消foo的定義，重新調查一次
unset foo
is_defined "foo"


#========================================================================
# var_tmpassign.sh - 暫時性地變更環境變數
#========================================================================

echo "LANG=${LANG}"

for lang in ja_JP.eucJP ja_JP.UTF-8 \
    en_US.ISO8859-1 fr_FR.ISO8859-1 de_DE.ISO8859-1; do
  echo -n "$lang - "
  #echo "$lang - \c"  # Solaris的情況
  LANG="$lang" date +'%B %d (%A)'
done

# LANG的值並未改變
echo "LANG=${LANG}"


#========================================================================
# var_to_file.sh - 把變數的內容寫到檔案中
#========================================================================

# file.out中會寫入變數msg的內容
msg='Where do you want to go today?'
echo "$msg" > file.out


#========================================================================
# var_readonly.sh - 把變數設為唯讀
#========================================================================

foo="foo bar bar"
readonly foo 
foo="baz baz foo"  # 會發生錯誤


#========================================================================
# var_error.sh - 變數未被定義時出現錯誤
#========================================================================

# 在這裡寫入您的名字
yourname=

# 若yourname是空值的話，則會出現錯誤
echo "Good evening, ${yourname:?Please edit var_error.sh!}!"

